#!/usr/bin/perl -w
use strict;
use List::Util;

use Sort::ArbBiLex (
    spanish_sort => q{
     a A á Á
     b B
     c C
     d D
     e E é É
     f F
     g G
     h H
     i I í Í
     j J
     k K
     l L
     m M
     n N
     ñ Ñ
     o O ó Ó
     p P
     q Q
     r R
     s S
     t T
     u U ú Ú
     v V
     w W
     x X
     y Y
     z Z 
  }
);

#Lectura de parametros (si existen)
my $init = -1;
my $final;
if (@ARGV >= 3) {
   $final = pop;
   $init = pop;
} elsif (@ARGV >= 2) {
   $init = pop;
}

#Lectura de las lineas del fichero
my @filelines = <> or die "Se esperaba el nombre de un fichero";

#Arreglo de posibles fallos en argumentos
die "Primera linea de fichero mayor que la ultima" if (defined $final) and (defined $init) and ($init > $final);
die "Ultima linea del fichero mayor que el tamaño del fichero" if (defined $final) and (defined $init) and ($final > @filelines);
$final = scalar(@filelines) if (!$final);

#Ordenacion de las lineas del fichero
if ($init == -1) {
   print foreach (spanish_sort(@filelines));
} else {

   my @firstLines = splice(@filelines, 0, $init);
   my @linesToOrder = splice(@filelines, 0, ($final - $init));
   # En @filelines solo quedaran las lineas finales (o estara vacio)
   @linesToOrder = spanish_sort(@linesToOrder);
   @filelines = (@firstLines, @linesToOrder, @filelines);
   print foreach (@filelines);

}
